# copied from http://www.cmake.org/Wiki/CMakeMacroListOperations#LIST_CONTAINS
MACRO(LIST_CONTAINS var value)
	SET(${var})
	FOREACH (value2 ${ARGN})
	IF (${value} STREQUAL ${value2})
		SET(${var} TRUE)
	ENDIF (${value} STREQUAL ${value2})
	ENDFOREACH (value2)
ENDMACRO(LIST_CONTAINS)

# copied from http://www.cmake.org/Wiki/CMakeMacroParseArguments
MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
	SET(DEFAULT_ARGS)
	FOREACH(arg_name ${arg_names})
		SET(${prefix}_${arg_name})
	ENDFOREACH(arg_name)
	FOREACH(option ${option_names})
		SET(${prefix}_${option} FALSE)
	ENDFOREACH(option)

	SET(current_arg_name DEFAULT_ARGS)
	SET(current_arg_list)
	FOREACH(arg ${ARGN})
		LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
		IF (is_arg_name)
			SET(${prefix}_${current_arg_name} ${current_arg_list})
			SET(current_arg_name ${arg})
			SET(current_arg_list)
		ELSE (is_arg_name)
			LIST_CONTAINS(is_option ${arg} ${option_names})
			IF (is_option)
		SET(${prefix}_${arg} TRUE)
			ELSE (is_option)
		SET(current_arg_list ${current_arg_list} ${arg})
			ENDIF (is_option)
		ENDIF (is_arg_name)
	ENDFOREACH(arg)
	SET(${prefix}_${current_arg_name} ${current_arg_list})
ENDMACRO(PARSE_ARGUMENTS)

MACRO(GLOB_PATHS var)
	SET(GP_result)
	PARSE_ARGUMENTS(GP
		"GLOBS;BASES"
		"NOBASERESULT"
		${ARGN}
	)
	FOREACH(name ${GP_BASES})
		FOREACH(glob ${GP_GLOBS})
			SET(GP_globres)
			FILE(GLOB GP_globres ${name}/${glob})
			IF(NOT GP_NOBASERESULT)
				SET(GP_result ${GP_result} ${name})
			ENDIF(NOT GP_NOBASERESULT)
			SET(GP_result ${GP_result} ${GP_globres})
		ENDFOREACH(glob)
	ENDFOREACH(name)
	IF(GP_result)
		LIST(SORT GP_result ${GP_result})
		LIST(REVERSE GP_result ${GP_result})
	ENDIF(GP_result)
	SET(${var} ${GP_result})
ENDMACRO(GLOB_PATHS)
